# 一、根据输入数字，输出对应月份英文缩写
s = '''Jan Feb Mar Apr May Jun Jul
Aug Sep Oct Nov Dec'''
m = eval(input("请输入1—12的月份："))
n = s[4 * (m - 1):4 * m:1]
print('月份缩写：', n)

# 输出结果：请输入1—12的月份：1
#          月份缩写： Jan

# 二、字符串
s = 'ABS' + '111'
print('字符串连接：', s)
s = 'a' * 3
print('字符串复制：', s)
m = 'ab' in 'abcd'
print('判断ab是否为abcd的字串：', m)
n = r'\n'
print('原始字符', n)

# 多行注释三个单引号或双引号
'''
字符串连接： ABS111
字符串复制： aaa
#判断ab是否为abcd的字串： True
#原始字符 \n
'''

# 三、内置的字符串处理函数
s = 'asndasdna'
print('长度：', len(s))
m = 123
print('转换为字符串：', str(m))
r = 65
print('转换成Unicode编码的字符串：', chr(r))
x = 'A'
print('返回字符x的Unicode编码：', ord(x))
print('a=', ord('a'), 'z=', ord('z'), 'A=', ord('A'), 'Z=', ord('Z'))

# 输出结果：
'''
长度： 9
转换为字符串： 123
转换成Unicode编码的字符串： A
返回字符x的Unicode编码： 65
a= 97 z= 122 A= 65 Z= 90
'''
# 四、内置的字符串处理方法:字符串查找类方法：find()、rfind()、index()、rindex()、count()
a = 'abcdemnopab'
b = 'ab'
print('find(b):', a.find(b))
print('find(ac):', a.find('ac'))
print('rfind(ab):', a.rfind('ab'))
print('index(ab):', a.find('ab'))
# print('index(cb):',a.index('cb')) 不存在抛出异常
print('rindex(ab):', a.rindex('ab'))
print('count(ab):', a.count('ab'))
print('count(ax):', a.count('ax'))

# 输出结果：
'''
find(b): 0
find(ac): -1
rfind(ab): 9
index(ab): 0
rindex(ab): 9
count(ab): 2
count(ax): 0
'''
# 五、 内置的字符串处理方法:字符串分隔类方法：split()、rsplit()、partition()、rpartition()
s = 'luck, nice, beautife, good'
s1 = s.split()
print('split(''):', s1)
print('split(","):', s.split(','))
print('rsplit(''):', s.rsplit())
h = 'luckly'
print('partition():', h.partition('l'))
print('rpartion()', h.rpartition('l'))
# 输出结果：
'''
split(): ['luck,', 'nice,', 'beautife,', 'good']
split(","): ['luck', ' nice', ' beautife', ' good']
rsplit(): ['luck,', 'nice,', 'beautife,', 'good']
partition(): ('', 'l', 'uckly')
rpartion() ('luck', 'l', 'y')
'''

# 六、内置的字符串处理方法:字符串连接方法：join()
lists = ['hello', 'word', 'luck']
print('join1:', ':'.join(lists))
print('join2:', '-'.join(lists))
# 内置的字符串处理方法:大小写字符转换方法：lower()、upper()、capitalize()、title()、swapcase()
s = 'I am luckly'
print('lower(小写):', s.lower())
print('upper(大写):', s.upper())
print('capitalize(首字母大写)：', s.capitalize())
print('title(每个单词首字母大写)：', s.title())
print('swapcase(大小写互换):', s.swapcase())
# 输出结果：
'''
join1: hello:word:luck
join2: hello-word-luck
lower(小写): i am luckly
upper(大写): I AM LUCKLY
capitalize(首字母大写)： I am luckly
title(每个单词首字母大写)： I Am Luckly
swapcase(大小写互换): i AM LUCKLY

'''

# 七、内置的字符串处理方法:字符串替换方法：replace()
s = 'I am luck'
print('replace(替换):', s.replace("luck", "luckly"))
# 删除字符串两端，右端或左端连续空白字符和指定字符方法：strip()、rstrip()、lstrip()。
h = ' hell word '
print('strip():', h.strip())
print('rstrip():', h.rstrip())
print('lstrip():', h.lstrip())
g = '======luck===='
print('删除两端指定字符：', g.strip('='))

# 输出结果：
'''
replace(替换): I am luckly
strip(): hell word
rstrip():  hell word
lstrip(): hell word 
删除两端指定字符： luck
'''

# 八、内置的字符串处理方法:判断字符串类型方法： isupper()、islower()、isdigit()、isalpha()、isalnum()
m = 'new year'
print('字符串是否为全小写：', m.islower())
print('字符串是否为全大写：', m.isupper())
print('字符串是否全为数字：', m.isdigit())
n = '2021 happy new year'
print('判断字符串是否全为字母：', n.isalpha())
print('替换空格：', n.replace(' ', ''))
n = n.replace(' ', '')
print('判断字符串是否为数字或字母：', n.isalnum())  # 字符串中如果有空格返回结果为：false

# 输出结果：
'''
字符串是否为全小写： True
字符串是否为全大写： False
字符串是否全为数字： False
判断字符串是否全为字母： False
替换空格： 2021happynewyear
判断字符串是否为数字或字母： True
'''

# 九、内置的字符串处理方法:字符串排版方法：center()、ljust()、rjust()、zfill()
o = 'luck me'
print('字符串居中对齐输出11位不足以=填充：', o.center(11, '='))
print('"双引号："', o.center(11, "="))
print('字符串左侧对齐输出11位不足以*填充：', o.ljust(11, '*'))
print('字符串居右对齐输出11位不足以*填充：', o.rjust(11, '*'))
print('输出11位，不足在字符串左侧以0填充', o.zfill(11))

# 输出结果：
'''
字符串居中对齐输出11位不足以=填充： ==luck me==
"双引号：" ==luck me==
字符串左侧对齐输出11位不足以*填充： luck me****
字符串居右对齐输出11位不足以*填充： ****luck me
输出11位，不足在字符串左侧以0填充 0000luck me
'''

# 十、字符串格式化：Python 支持格式化字符串的输出 ，将一个值插入到一个有字符串格式符 % 的字符串中。
print('%s今年%d岁了' % ('小米', 10))
name = '小米'
age = 10
print('%s今年%d岁了' % (name, age))
# 从Python2.6 开始，新增了一种格式化字符串的方法 str.format()，它增强了字符串格式化的功能，基本语法是通过“{}”和“：”来代替以前的“%”。
# format方法可以有多个输出项，位置可以按指定顺序。
print('{}今年{}岁了，上{}年级'.format('小米', 10, 3))
print('{0}今年{1}岁了，上{2}年级'.format('小米', 10, 3))
print('{2}今年{1}岁了，上{0}年级'.format('小米', 10, 3))
# 输出结果：
'''
小米今年10岁了
小米今年10岁了
小米今年10岁了，上3年级
小米今年10岁了，上3年级
3今年10岁了，上小米年级
'''
# 十一、 当使用format方法格式化字符串的时候，需要在“{}”中首先输入“：”。“：”称为格式引导符。“：”之后分别设置<填充字符> <对齐方式> <宽度>。
print("{:=^10}".format('MIKE'))  # 居中对齐，宽度为10，不足=填充
print('{:=<10}'.format('MIKE'))
print('{:=>10}'.format('MIKE'))
# >>>>>>>>>
print('{:.2f}'.format(3.141592653))  # 结果保留两位小数
print('{:.4f}'.format(3.141592653))
print('{:5d}'.format(24))  # 居右对齐，宽度为5，不足空格填充，整数形式填充
print('{:<5d}'.format(24))

# 输出结果：
'''
===MIKE===
MIKE======
======MIKE
3.14
3.1416
   24
24   
'''
# 十二、类型转换:如果算数运算符的操作数之一是浮点数，结果为浮点数即为类型转换
# round(x[,ndigits])函数也可以对数字进行四舍五入转换为最近的整数
# 函数int 和round 都不会改变变量原来的值
print('浮点转为整形:', int(3.14))
print('整形转为浮点：', float(5))
# 无法转换：int（”3.4”)、int（”ab”); int()与eval()类似但eval（”3.4”)可以
# 强制转换：强制类型转化是将表达式强制转换为所需的数据类型。

m = float(input('请输入圆周率：'))
print('圆周率：', m)
n = int(input('请输入半径：'))
print('半径：', n)

# 输出结果:
'''
浮点转为整形: 3
整形转为浮点： 5.0
请输入圆周率：3
圆周率： 3.0
请输入半径：3
半径： 3
'''

# 练习题：
# 一、判断回文数。用户输入一个四位数，如果是回文数显示True,
# 不是则显示False
# 回文数就是反过来的数字与正着的数字是相同的。如1221

a = eval(input('请输入一个4位数：'))
a = str(a)
b = a[::-1]
print('a:=', a)
print('b=', b)
print('判断输入数字是否为回文数：', a in b)

# 输出结果：
'''
请输入一个4位数：1234
a:= 1234
b= 4321
判断输入数字是否为回文数： False
'''
# 二、给出字符串strings=‘ababaabbbaba’。写一个表达式，去除其中所有‘b’，得到另一个字符串newstring=‘aaaaaa’。
s = 'ababaabbbaba'
h = s.replace('b', '')  # 将所有b替换为空
print('去除b后的字符串：', h)
# 输出结果：
'''
去除b后的字符串： aaaaaa
'''
#   三、 字符串S长度为偶数：
# （a）写出显示前半段字符串的表达式。
# （b）写出显示后半段字符串的表达式
S = input('请输入一个偶数位的字符串：')
print('S=', S)
a = S[0:len(S) // 2:1]
print('前半段：a=', a)
b = S[len(S) // 2:len(S):1]
print('后半段：b=', b)

# 输出结果：
'''
请输入一个偶数位的字符串：aabb
S= aabb
前半段：a= aa
后半段：b= bb
'''
